home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / ImportXMLHandler$CMNode.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  3.9 KB  |  226 lines

  1. package com.extensibility.xml;
  2.  
  3. import java.util.Enumeration;
  4. import java.util.Hashtable;
  5. import java.util.Vector;
  6.  
  7. class ImportXMLHandler$CMNode {
  8.    // $FF: synthetic field
  9.    final ImportXMLHandler this$0;
  10.    Hashtable next;
  11.    String name;
  12.    char occurance;
  13.    char connector;
  14.    Vector particles;
  15.  
  16.    ImportXMLHandler$CMNode(ImportXMLHandler var1, String var2) {
  17.       this.this$0 = var1;
  18.       this.next = new Hashtable();
  19.       this.occurance = 0;
  20.       this.connector = ',';
  21.       this.particles = new Vector();
  22.       this.name = var2;
  23.    }
  24.  
  25.    boolean isRoot() {
  26.       return this.name.length() == 0;
  27.    }
  28.  
  29.    ImportXMLHandler$CMNode add(String var1) {
  30.       ImportXMLHandler$CMNode var2 = (ImportXMLHandler$CMNode)this.next.get(var1);
  31.       if (var1.equals(this.name)) {
  32.          this.setMultiple();
  33.          return this;
  34.       } else if (var2 != null) {
  35.          return var2;
  36.       } else {
  37.          ImportXMLHandler$CMNode var3 = new ImportXMLHandler$CMNode(this.this$0, var1);
  38.          this.next.put(var1, var3);
  39.          return var3;
  40.       }
  41.    }
  42.  
  43.    void setMultiple() {
  44.       if (this.occurance == 0) {
  45.          this.occurance = '+';
  46.       } else if (this.occurance == '?') {
  47.          this.occurance = '*';
  48.       }
  49.  
  50.    }
  51.  
  52.    void doNodeChoice(ContentModelTerm var1) {
  53.       if (!var1.contains(this.name)) {
  54.          var1.addTerm(new ContentModelTerm(new TypeRef(this.name), '\u0000', '|'));
  55.       }
  56.  
  57.       Enumeration var2 = this.next.elements();
  58.  
  59.       while(var2.hasMoreElements()) {
  60.          ImportXMLHandler$CMNode var3 = (ImportXMLHandler$CMNode)var2.nextElement();
  61.          var3.doNodeChoice(var1);
  62.       }
  63.  
  64.    }
  65.  
  66.    void mergeNexts(ImportXMLHandler$CMNode var1) {
  67.       Enumeration var2 = var1.next.elements();
  68.  
  69.       while(var2.hasMoreElements()) {
  70.          ImportXMLHandler$CMNode var3 = (ImportXMLHandler$CMNode)var2.nextElement();
  71.          this.merge(var3);
  72.       }
  73.  
  74.    }
  75.  
  76.    void merge(ImportXMLHandler$CMNode var1) {
  77.       Enumeration var2 = this.next.elements();
  78.       boolean var3 = false;
  79.  
  80.       while(var2.hasMoreElements()) {
  81.          ImportXMLHandler$CMNode var4 = (ImportXMLHandler$CMNode)var2.nextElement();
  82.          if (var4.equals(var1)) {
  83.             var4.mergeNexts(var1);
  84.             var3 = true;
  85.             break;
  86.          }
  87.       }
  88.  
  89.       if (!var3) {
  90.          this.next.put(var1.name, var1);
  91.       }
  92.  
  93.    }
  94.  
  95.    ImportXMLHandler$CMNode firstNext() {
  96.       return this.next.size() < 1 ? null : (ImportXMLHandler$CMNode)this.next.elements().nextElement();
  97.    }
  98.  
  99.    boolean equals(ImportXMLHandler$CMNode var1) {
  100.       return var1 != null && this.name.equals(var1.name);
  101.    }
  102.  
  103.    ImportXMLHandler$CMNode mergeUsingOptional() {
  104.       if (this.next.size() != 2) {
  105.          return null;
  106.       } else {
  107.          Enumeration var1 = this.next.elements();
  108.          ImportXMLHandler$CMNode var2 = (ImportXMLHandler$CMNode)var1.nextElement();
  109.          ImportXMLHandler$CMNode var3 = (ImportXMLHandler$CMNode)var1.nextElement();
  110.          if (var2.next.size() == 1 && var2.firstNext().equals(var3)) {
  111.             var2.firstNext().mergeNexts(var3);
  112.             var2.occurance = '?';
  113.             return var2;
  114.          } else if (var3.next.size() == 1 && var3.firstNext().equals(var2)) {
  115.             var3.firstNext().mergeNexts(var2);
  116.             var3.occurance = '?';
  117.             return var3;
  118.          } else {
  119.             return null;
  120.          }
  121.       }
  122.    }
  123.  
  124.    ImportXMLHandler$CMNode extractCommonLeaves() {
  125.       ImportXMLHandler$CMNode var1;
  126.       ImportXMLHandler$CMNode var2;
  127.       for(var1 = null; !this.next.isEmpty(); var1 = var2) {
  128.          var2 = this.getFirstLeaf();
  129.          if (!this.leavesAreAll(var2)) {
  130.             break;
  131.          }
  132.  
  133.          this.extractLeaf(var2);
  134.          if (var1 != null) {
  135.             var2.next.put(var1.name, var1);
  136.          }
  137.       }
  138.  
  139.       return var1;
  140.    }
  141.  
  142.    void extractLeaf(ImportXMLHandler$CMNode var1) {
  143.       if (var1.equals(this.firstNext())) {
  144.          this.next.remove(var1.name);
  145.       } else {
  146.          Enumeration var2 = this.next.elements();
  147.  
  148.          while(var2.hasMoreElements()) {
  149.             ImportXMLHandler$CMNode var3 = (ImportXMLHandler$CMNode)var2.nextElement();
  150.             var3.extractLeaf(var1);
  151.          }
  152.       }
  153.  
  154.    }
  155.  
  156.    ImportXMLHandler$CMNode getFirstLeaf() {
  157.       return this.next.isEmpty() ? this : this.firstNext().getFirstLeaf();
  158.    }
  159.  
  160.    boolean leavesAreAll(ImportXMLHandler$CMNode var1) {
  161.       if (this.next.isEmpty()) {
  162.          return this.equals(var1);
  163.       } else {
  164.          Enumeration var2 = this.next.elements();
  165.  
  166.          while(var2.hasMoreElements()) {
  167.             ImportXMLHandler$CMNode var3 = (ImportXMLHandler$CMNode)var2.nextElement();
  168.             boolean var4 = var3.leavesAreAll(var1);
  169.             if (!var4) {
  170.                return false;
  171.             }
  172.          }
  173.  
  174.          return true;
  175.       }
  176.    }
  177.  
  178.    void doNodeSeq(ContentModelTerm var1) {
  179.       ImportXMLHandler$CMNode var2 = null;
  180.       ImportXMLHandler$CMNode var3 = null;
  181.       if (!this.isRoot()) {
  182.          var1.addTerm(new ContentModelTerm(new TypeRef(this.name), this.occurance, ','));
  183.       }
  184.  
  185.       if (this.next.size() == 1) {
  186.          this.firstNext().doNodeSeq(var1);
  187.       } else {
  188.          var2 = this.mergeUsingOptional();
  189.          if (var2 != null) {
  190.             var2.doNodeSeq(var1);
  191.          }
  192.       }
  193.  
  194.       if (var2 == null && this.next.size() > 1) {
  195.          var3 = this.extractCommonLeaves();
  196.          ContentModelTerm var4 = new ContentModelTerm('*', ',');
  197.          Enumeration var5 = this.next.elements();
  198.  
  199.          while(var5.hasMoreElements()) {
  200.             ImportXMLHandler$CMNode var6 = (ImportXMLHandler$CMNode)var5.nextElement();
  201.             var6.doNodeChoice(var4);
  202.          }
  203.  
  204.          var1.addTerm(var4);
  205.          if (var3 != null) {
  206.             var3.doNodeSeq(var1);
  207.          }
  208.       }
  209.  
  210.    }
  211.  
  212.    void doNodeAsMixed(ContentModelTerm var1) {
  213.       if (!this.isRoot() && !var1.contains(this.name)) {
  214.          var1.addTerm(new ContentModelTerm(new TypeRef(this.name), this.occurance, '|'));
  215.       }
  216.  
  217.       Enumeration var2 = this.next.elements();
  218.  
  219.       while(var2.hasMoreElements()) {
  220.          ImportXMLHandler$CMNode var3 = (ImportXMLHandler$CMNode)var2.nextElement();
  221.          var3.doNodeChoice(var1);
  222.       }
  223.  
  224.    }
  225. }
  226.